/*
 * @Description:
 * @Author: your name
 * @version:
 * @Date: 2024-01-25 09:18:33
 * @LastEditors: your name
 * @LastEditTime: 2024-01-25 15:24:43
 */
const vetrixShader = /*glsl*/ `
void vertexMain(VertexInput vsInput, inout czm_modelVertexOutput vsOutput) {
    // 获取模型坐标
    vec3 positionMC=vsInput.attributes.positionMC;
    // 获取随时间变化的值ITime 取值（0,1）
    float ITime=sin(czm_frameNumber / 120.0);
    // 扫描的位置
    float range=mix(u_min,u_max,ITime);
    // 判断当前的模型坐标，是否在高亮范围内
    bool isRingZ=range < positionMC.z && range > positionMC.z - u_live_width;
    bool isRingX=range < positionMC.x && range > positionMC.x - u_live_width;
    vec3 col=vec3(.0,.0,.0);
    if(isRingZ || isRingX){
        col=vec3(1.,1.,1.);
    }
    // 将高亮色，传给片元
    v_color=col;
}
`;

const fragmentShader = /*glsl*/ `
void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {
    // 获取模型坐标
    vec3 positionMC=fsInput.attributes.positionMC;

    // 获取随时间变化的值ITime 取值（0,1）
    float ITime=sin(czm_frameNumber / 60.0);

    // 计算当前片元的模型高度 因为数据问题，取y分量，y相当于z是当前片元的高度
    float czm_height=positionMC.y-minHeight;
    // 将范围打到（0,1）的区间 clamp(value,min,max)
    float czm_h=clamp(czm_height/maxHeight,.0,1.);

    // 假设我们只需要一条固定光带 宽度为0.05
    float czm_diff = step(0.005, abs(czm_h - ITime));
    // czm_diff为1，代表当前片元不在0.005这个光带里面,我们保留原来的颜色
    // czm_diff为0，代表当前片元在0.005这个光带里面，我们给原来的颜色加上亮度
    material.diffuse += (material.diffuse * (1.0 - czm_diff)*13.0);

    // 模型渐变色
    material.diffuse *= (czm_h+ITime*0.1); // 渐变

    material.diffuse+=v_color;
}
`;

export default { vetrixShader, fragmentShader };
